package com.empire.module.member.controller.admin.superrelation.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 类名：ImContactRelationDto
 * 描述：Im联系人关系节点
 * 时间：2019/10/8 16:03
 *
 * @author baoxiaoxu
 */
@Data
public class ImContactRelationDto {
    /**
     * 关系列表
     */
    private List<Relation> relationShipList;

    /**
     * 关系节点列表
     */
    private List<Node> nodeList;
    /**
     * 节点
     */
    @Data
    public static class Node {
        /**
         * 生成的节点唯一ID
         */
        private long uniqueId;
        /**
         * 主账号
         */
        private String uniqueAccount;
        /**
         * 账号
         */
        private String account;
        /**
         * 名称
         */
        private String name;
        /**
         * 昵称
         */
        private String nickName;
        /**
         * 电话
         */
        private String phone;
        /**
         * 头像
         */
        private String icon;
        /**
         * 账号类型：1：虚拟人,2：联系人,3:群,4:主账号
         */
        private Integer type;
        /**
         * 账号所属应用，虚拟人此项为空
         */
        private Long businessActionId;
        /**
         * 所属虚拟人ID
         */
        private Long virtualHumanId;
    }

    /**
     * 此类是通过虚拟人和联系人账号来进行关联
     * <p>
     * 关联依据是： 发生的时间，比如发短信，打电话，发微信等等
     */
    @Data
    @AllArgsConstructor
    public static class Relation extends Object {
        /**
         * 程序生成的虚拟人标识
         * <p>
         * 组装结构：v_virtualHumanId
         */
        long node1;
        /**
         * 程序生成的联系人账号标识
         *
         * 组装结构： c_businessActionId_account
         *
         */
        long node2;
        /**
         * 每条连线发生的事件集合
         */
        private List<NodeDetail> nodeDetailList;

        public Relation(){
        }

        @Override
        public boolean equals(Object obj) {
            Relation relation = (Relation) obj;
            return (this.node1 == relation.getNode1() && this.node2 == relation.getNode2())
                    || (this.node1 == relation.getNode2() && this.node2 == relation.getNode1());
        }
    }

    /**
     * 发生事件数据
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class NodeDetail{
        /**
         * 应用类型
         * 手机短信 1000000002
         * 手机通话记录 1000000003
         */
        private Long type;
        /**
         *  次数
         */
        private Long num;
        /**
         *  主账号
         */
        private String uniqueAccount;

    }
}
